gtkcolorplane: Stop using ::key-press-event
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 5 Mar 2018 13:59:07 +0000 (14:59 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 5 Apr 2018 17:26:53 +0000 (19:26 +0200)
Use GtkEventControllerKey for the task

gtk/gtkcolorplane.c

index 658efca1ebff1eb5f45e50bdeaec0d125ac0ffa7..c45adc2ba1aff4cd92bbfaecd4f5b50430fa115e 100644 (file)
@@ -27,6 +27,7 @@
 #include "gtkintl.h"
 #include "gtksnapshot.h"
 #include "gtkprivate.h"
+#include "gtkeventcontrollerkey.h"
 
 struct _GtkColorPlanePrivate
 {
@@ -38,6 +39,7 @@ struct _GtkColorPlanePrivate
 
   GtkGesture *drag_gesture;
   GtkGesture *long_press_gesture;
+  GtkEventController *key_controller;
 };
 
 enum {
@@ -308,16 +310,14 @@ error:
 }
 
 static gboolean
-plane_key_press (GtkWidget   *widget,
-                 GdkEventKey *event)
+key_controller_key_pressed (GtkEventControllerKey *controller,
+                            guint                  keyval,
+                            guint                  keycode,
+                            GdkModifierType        state,
+                            GtkWidget             *widget)
 {
   GtkColorPlane *plane = GTK_COLOR_PLANE (widget);
   gdouble step;
-  guint keyval, state;
-
-  if (!gdk_event_get_keyval ((GdkEvent *) event, &keyval) ||
-      !gdk_event_get_state ((GdkEvent *) event, &state))
-    return GDK_EVENT_PROPAGATE;
 
   if ((state & GDK_MOD1_MASK) != 0)
     step = 0.1;
@@ -337,7 +337,7 @@ plane_key_press (GtkWidget   *widget,
            keyval == GDK_KEY_KP_Right)
     sv_move (plane, 0, step);
   else
-    return GTK_WIDGET_CLASS (gtk_color_plane_parent_class)->key_press_event (widget, event);
+    return FALSE;
 
   return TRUE;
 }
@@ -424,6 +424,10 @@ gtk_color_plane_init (GtkColorPlane *plane)
                     G_CALLBACK (hold_action), plane);
   gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (plane->priv->long_press_gesture),
                                      TRUE);
+
+  plane->priv->key_controller = gtk_event_controller_key_new (GTK_WIDGET (plane));
+  g_signal_connect (plane->priv->key_controller, "key-pressed",
+                    G_CALLBACK (key_controller_key_pressed), plane);
 }
 
 static void
@@ -439,6 +443,7 @@ plane_finalize (GObject *object)
 
   g_clear_object (&plane->priv->drag_gesture);
   g_clear_object (&plane->priv->long_press_gesture);
+  g_clear_object (&plane->priv->key_controller);
 
   G_OBJECT_CLASS (gtk_color_plane_parent_class)->finalize (object);
 }
@@ -500,7 +505,6 @@ gtk_color_plane_class_init (GtkColorPlaneClass *class)
   widget_class->size_allocate = plane_size_allocate;
   widget_class->realize = plane_realize;
   widget_class->unrealize = plane_unrealize;
-  widget_class->key_press_event = plane_key_press;
 
   g_object_class_install_property (object_class,
                                    PROP_H_ADJUSTMENT,